
/*
 * @Author: ltm@xtoneict.com
 * @Date: 2021-12-16 14:40:18
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2024-04-19 14:44:14
 * @FilePath: \web-pc\src\lib\dd-moment.js
 */


const DDmoment = function (date) {
  let time;
  if (!date) {
    time = new Date()
  } else if (date) {
    time = new Date(date);
  }
  return {
    time,
    format,
    subtract,
    getTime,
  }
}
/**
 * @content 前多少天
 * @param  days  天 ||  years 年  || months 月 ||  weeks 周 
 * @returns 
 */
function subtract (num, type) {
  let time = this.time
  time.setTime(time.getTime() - getNeedTime(num, type))
  time = new Date(time)
  return {
    time,
    format,
    getTime
  }
}
/**
 * @param  Yy年  ||  M 月  || Dd 日 ||  Hh 时 || m 分 || Ss 秒
 * @returns 
 */
function format (fmt) {
  let date = this.time
  let ret;
  const opt = {
    "Y+": date.getFullYear().toString(),        // 年
    "y+": date.getFullYear().toString(),        // 年
    "M+": (date.getMonth() + 1).toString(),     // 月
    "d+": date.getDate().toString(),            // 日
    "D+": date.getDate().toString(),            // 日
    "h+": date.getHours().toString(),           // 时
    "H+": date.getHours().toString(),           // 时
    "m+": date.getMinutes().toString(),         // 分
    "S+": date.getSeconds().toString(),         // 秒
    "s+": date.getSeconds().toString()          // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  };
  for (let k in opt) {
    ret = new RegExp("(" + k + ")").exec(fmt);
    if (ret) {
      fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
    };
  };
  return fmt;
}
//时间戳转时间
function getTime () {
  return new Date(this.time)
}
//获取需要的时间
function getNeedTime (num, type) {
  let time = 0
  switch (type) {
    case "days":
      time = 3600 * 1000 * 24 * num;
      break;
    case "years":
      time = 3600 * 1000 * 24 * 365 * num;
      break;
    case "months":
      time = 3600 * 1000 * 24 * 30 * num;
      break;
    case "weeks":
      time = 3600 * 1000 * 24 * 7 * num;
      break;
    default:
      break;
  }
  return time;
}
export default DDmoment